package Utils.converters;

import Utils.DateTimeUtils;
import Utils.delegations.IFunc;
import org.apache.poi.ss.formula.functions.T;

import java.sql.Date;
import java.text.SimpleDateFormat;

/**
 * 把普通数据类型转换为SQL数据类型
 * @author d11yu
 */
public class Data2SqlDataType implements IFunc<T> {
    private SimpleDateFormat sdf;
    @Override
    public T invoke() {
        return null;
    }

    @Override
    public T invoke(Object... objs) throws Exception {
        return null;
    }

    @Override
    public <K> K invoke(Class<K> clazz, Object... objs) throws Exception {
        DataType dataType = MyUtils.getDataType(objs[0]);
        switch (dataType) {
            case BOOLEAN:
            case DOUBLE:
            case INT:
            case STRING:
                return (K) objs[0];
            case DATE_UTIL:
                if (clazz.equals(String.class)) {
                    return (K) sdf.format(objs[0]);
                } else if (clazz.equals(Date.class)){
                    return (K) DateTimeUtils.utilDate2SqlDate((java.util.Date) objs[0]);
                }
            case DATE_SQL:
                if (clazz.equals(String.class)) {
                    return (K) sdf.format(DateTimeUtils.sqlDate2UtilDate((Date) objs[0]));
                } else if(clazz.equals(Date.class)){
                    return (K) objs[0];
                }
            default:
                break;
        }
        return null;
    }

    /**
     * 构造函数，默认会以"yyyy-MM-dd"的格式来储存日期
     */
    public Data2SqlDataType() {
        this.sdf = new SimpleDateFormat("yyyy-MM-dd");
    }

    /**
     * 构造函数，可以指定日期格式。
     *
     * @param format 日期的格式，例如："yyyy-MM-dd"。
     */
    public Data2SqlDataType(String format) {
        this.sdf = new SimpleDateFormat(format);
    }
}
